package com.masterlu.leetcode.daily.stack.simple;

import java.util.Stack;

/**
 * 最小栈
 * https://leetcode-cn.com/problems/min-stack/
 *
 * @Author：masterlu
 * @Date：2021/4/23 9:47 上午
 */
public class S155MinStack {

    /**
     * 关键是，记录历史元素数据的最小数据。
     *
     * 利用辅助栈思路，
     * 辅助栈记录历史最小值，随着原始栈数据不断变化，最小值也不同。
     */

    private Stack<Integer> stack;
    private Stack<Integer> minList = new Stack<>();

    public S155MinStack() {
        stack = new Stack<>();
        minList.push(Integer.MAX_VALUE);
    }


    public void push(int val) {
        stack.push(val);
        minList.add(Math.min(minList.peek(),val));
    }

    public void pop() {
        stack.pop();
        minList.pop();
    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return minList.peek();
    }
}
